package 二叉树2;

import common.TreeNode;

/**
 * @author tmh
 * @date 2024/9/10 22:45
 * @description
 */
public class T543二叉树的直径 {
    int result = 0;

    public int diameterOfBinaryTree(TreeNode root) {
        maxLength(root);
        return result;
    }

    private int maxLength(TreeNode root) {
        if (root == null) {
            return -1;
        }
        //往左遍历
        int leftLength = maxLength(root.left);
        //往右遍历
        int rightLength = maxLength(root.right);
        //表示的是再当前节点拐弯的直径长度
        result = Math.max(result,leftLength+rightLength+2);
        //表示的是以当前节点为根节点的子树的最长长度
        return Math.max(leftLength, rightLength) + 1;
    }
}
